この例では、2個のボタンと1個のリストボックスを使用して、.zip ファイルから画像を取得する方法を示します。
zip ファイルから画像を直接取得するために、最初に、いくつかの画像ファイルを1つの zip ファイルに圧縮するコードを追加します。この例では、btnNew_Click イベントにこのコードを追加します。ここで、ボタンがクリックされたときに画像の新しい .zip ファイルを作成します。
C# コードの書き方
C# |
コードのコピー
|
---|---|
private void btnNew_Click(object sender, RoutedEventArgs e) |
次に、次のコードを使用して ListBox 内のリストに画像ファイルを追加します。
C# コードの書き方
C# |
コードのコピー
|
---|---|
private void btnAdd_Click(object sender, RoutedEventArgs e) { // 追加するファイルのリストを取得します。 OpenFileDialog fo = new OpenFileDialog(); fo.Multiselect = true; if (fo.ShowDialog() == true) { // リストにファイルを追加します。 foreach (FileInfo file in fo.Files) { Stream stream = file.OpenRead(); listBox1.Items.Add(file.Name); zipFile.Entries.Add(stream, file.Name); } |
画像を選択できるようにするには、画像データを含むストリームを取得し(OpenReader メソッド)、次のコードを listBox1_SelectionChanged イベントと StreamCopy イベントに追加します。
C# コードの書き方
C# |
コードのコピー
|
---|---|
private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) { // 選択された項目を取得します。 string item = (string)listBox1.SelectedItem; // 画像を圧縮ストリームから直接ロードします。 Stream stream = zipFile.Entries[item].OpenReader(); using (MemoryStream ms = new MemoryStream()) { StreamCopy(ms, stream); BitmapImage img = new BitmapImage(); img.SetSource(ms); this.image1.Source = img; // ストリームを閉じます。 stream.Close(); } } private void StreamCopy(Stream dstStream, Stream srcStream) { byte[] buffer = new byte[32768]; for (; ; ) { int read = srcStream.Read(buffer, 0, buffer.Length); if (read == 0) break; dstStream.Write(buffer, 0, read); } dstStream.Flush(); } |
ICO、TIFF、BMP、JPG などのいくつかのタイプの画像が表示されます。